//第十一天错题

//2024年3月10日

#include<stdio.h>

//1.有以下类型，判断ch/i + (f*d – i)的类型
// char ch;int i;float f;double d
//基本数据类型的等级从低到高如下：char int long float double运算的时候是从低转到高的
//表达式的类型会自动提升或者转换为参与表达式求值的最高级类型
//即，在一个表达式中有多种类型参与运算，表达式的结果类型取参与运算的最高级的类型

//2.判断程序运行的结果
//x为-1，二进制表示为全1，而y是一个无符号整型，有符号整型和无符号整型再进行比较的时候，有符号整型会被隐式类型转换为无符号的整型
//则，x就不表示为-1，而是一个很大的数
int main()
{
	int x = -1;
	unsigned int y = 2;

	if (x > y)
	{
		printf("x is greater");
	} 
	else
	{
	    printf("y is greater");
	} 

	return 0;
}

//3.取余操作符的两个操作数必须是整数

//4.下面函数的运行结果

void func()
{
	//1左移31位，变为符号位为1，剩余31位为0，再向右移31位时，每移一位，最高位补1，即结果为32个1，即-1
	//11111111111111111111111111111111
	//00000000000000000000000000000001
	//1^-1
	//补码 11111111111111111111111111111110
	//反码 10000000000000000000000000000001
	//原码 10000000000000000000000000000011
	//即-2
	int k = 1 ^ (1 << 31 >> 31);
	printf("%d\n", k);
}

//5.判断程序运行结果

//sizeof()运算符，在其内任何运算都不进行，只会推测其中表达式结果的类型求其大小
#include <stdio.h>
int main()
{
	int i = 1;
	sizeof(i++);
	printf("%d\n", i);
	return 0;
}

//6.最大连续1的个数

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
	//两者都是计数器
	int max_cont = 0;//最大连续1的个数
	int min_cont = 0;//连续1的个数

	int i = 0;
	for (i = 0; i < numsSize; i++)
	{
		//如果元素为1，则min_cont自加
		if (nums[i] == 1)
		{
			min_cont++;
		}
		else
		{
			//当元素不为1时，判断min_cont与max_cont直接的大小，大的传给max_cont
			//后将min_cont赋值为0，继续进行计数
			max_cont = max_cont > min_cont ? max_cont : min_cont;
			min_cont = 0;
		}
	}
	//当数组遍历完时，再次进行判断，将两个计数器中较大的值赋给max_cont，返回max_cont
	max_cont = max_cont > min_cont ? max_cont : min_cont;
	return max_cont;
}